package com.mendhak.gpslogger;
import java.util.List;
import org.achartengine.ChartFactory;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.joda.time.DateTime;
import org.moap.chart.SpeedOverTimeChart;
import org.moap.overlays.CustomOverlay;
import org.moap.overlays.GoogleMapsOverlay;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import arida.ufc.br.moap.core.beans.LatLonPoint;
import arida.ufc.br.moap.core.beans.Trajectory;
import arida.ufc.br.moap.core.imp.Parameters;
import arida.ufc.br.moap.datamodelapi.imp.TrajectoryModelImpl;
import arida.ufc.br.moap.datamodelapi.spi.ITrajectoryModel;
import arida.ufc.br.moap.importer.csv.imp.RawTrajectoryCSVImporter;
import arida.ufc.br.moap.importer.spi.ITrajectoryImporter;
import arida.ufc.br.moapgpstracker.R;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;
import com.mendhak.gpslogger.common.Utilities;
public class GoogleMapsViewActivity extends MapActivity {
private boolean routeDisplayed = false;
private ITrajectoryModel<LatLonPoint, DateTime> model;
private final int MAX = 3;
private final int[] colors = { Color.RED, Color.BLUE, Color.GREEN };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_google_maps_view);
try {
importData();
Utilities.LogDebug("GoogleMapsView.onCreate - Importing has succeeded");
MapView mapView = (MapView) findViewById(R.id.map_view);
mapView.setBuiltInZoomControls(true);
mapView.displayZoomControls(true);
mapView.setClickable(true);
List<Overlay> overlayList = mapView.getOverlays();
overlayList.clear();
if (model.getTrajectoryCount() > 0) {
Utilities
.LogDebug("GoogleMapsView.onCreate - It has trajectories");
int idx = 0;
for (Trajectory<LatLonPoint, DateTime> traj : model
.getTrajectories()) {
if (idx < MAX) {
int color = colors[idx % MAX];
// ItemizedOverlay<OverlayItem> itemized_overlay = new ItemizedOverlay<OverlayItem>();
GoogleMapsOverlay googleMapsOverlay = new GoogleMapsOverlay(
color);
Drawable default_icon = getResources().getDrawable(R.drawable.ic_checkin_marker);
default_icon.setBounds(0, 0, default_icon.getIntrinsicWidth(), default_icon.getIntrinsicHeight());
Drawable comment_icon = getResources().getDrawable(R.drawable.ic_comment);
comment_icon.setBounds(0, 0, comment_icon.getIntrinsicWidth(), comment_icon.getIntrinsicHeight());
CustomOverlay custom_overlay = new CustomOverlay(default_icon);
List<LatLonPoint> points = traj.getPoints();
for (int i = 0; i < points.size(); i++) {
LatLonPoint p = points.get(i);
GeoPoint geoPoint = new GeoPoint(
Utilities.convertCoordinates(p
.getLatitude()),
Utilities.convertCoordinates(p
.getLongitude()));
String checkin_annotation = (String) p.getAnnotations().getAnnotation("checkin").getValue();
String comment_annotation = (String) p.getAnnotations().getAnnotation("comment").getValue();
OverlayItem oi = new OverlayItem(geoPoint, "", "");
if(checkin_annotation != null){
Log.d("GoogleMapsViewAcitivity", "Annotation - Check-in");
OverlayItem itemized_oi = new OverlayItem(geoPoint, checkin_annotation, "Check-in");
custom_overlay.addOverlayItem(itemized_oi);
}
else if(comment_annotation != null ){
Log.d("GoogleMapsViewAcitivity", "Annotation - Comment");
OverlayItem itemized_oi = new OverlayItem(geoPoint, comment_annotation, "Comment");
oi.setMarker(comment_icon);
custom_overlay.addOverlayItem(itemized_oi);
}
googleMapsOverlay.addOverlayItem(oi);
}
/*
* Get last point for centering the visualization
*/
if (points.size() > 0) {
GeoPoint geoPoint = new GeoPoint(
Utilities.convertCoordinates(points.get(
points.size() - 1).getLatitude()),
Utilities.convertCoordinates(points.get(
points.size() - 1).getLongitude()));
mapView.getController().setCenter(geoPoint);
}
// Add overlay
overlayList.add(googleMapsOverlay);
// Add itemized overlay
if(custom_overlay.size() > 0){
overlayList.add(custom_overlay);
}
} else {
break;
}
idx++;
}
Utilities.LogDebug("GoogleMapsView.onCreate - Adding it to Overlay");
mapView.invalidate();
}
} catch (Exception e) {
Utilities.LogError("GoogleMapsView.onCreate", e);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_google_maps_view, menu);
return true;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return this.routeDisplayed;
}
/**
* Called when one of the menu items is selected.
*/
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
Utilities.LogInfo("Option item selected - "
+ String.valueOf(item.getTitle()));
switch (itemId) {
case R.id.mnu_chart:
onChartMenu();
break;
}
return true;
}
private void onChartMenu() {
SpeedOverTimeChart analysis = new SpeedOverTimeChart(this.model);
XYMultipleSeriesDataset dataset = analysis.createDataset();
XYMultipleSeriesRenderer renderer = analysis.createRenderer();
if (dataset != null && renderer != null) {
try {
Intent intent = ChartFactory.getTimeChartIntent(this, dataset, renderer, "HH:mm");
// Intent intent = ChartFactory.getLineChartIntent(this, dataset,renderer);
startActivity(intent);
} catch (Exception ex) {
Utilities.LogError("ERROR CHART", ex);
}
} else {
Utilities.LogDebug(String.format("Dataset - %s\nRenderer - ",
dataset.toString(), renderer.toString()));
}
}
@SuppressWarnings("unchecked")
private void importData(){
/*
* Get Data From the other Intent
*/
Bundle extras = getIntent().getExtras();
String[] array = extras
.getStringArray("arida.ufc.br.moap.TrajectoryView");
/*
* Trajectory Model from Moap
*/
this.model = new TrajectoryModelImpl<LatLonPoint, DateTime>();
/*
* Importer from CSV
*/
ITrajectoryImporter importer = new RawTrajectoryCSVImporter();
/*
* Creating parameters
*/
for (String s : array) {
Parameters params = new Parameters();
params.addParam(RawTrajectoryCSVImporter.PARAMETER_FILE,
Environment.getExternalStorageDirectory()
.getAbsolutePath()
+ "/"
+ "MoapGpsTracker/"
+ s);
importer.buildImport(model, params);
}
}
}